package com.nine.face.search;

public class IntegerOverflow {

    public static void main(String[] args) {

        // 溢出情况
        //m1();

        // 处理溢出情况
        //m2();

        // 右移1位，相当于除以2
        m3();

    }

    private static void m3() {
        int l = 0;
        int r = Integer.MAX_VALUE - 1;
        int m = (l + r) >>> 1;
        System.out.println(m);
        // 二分查找，在右侧
        l = m + 1;
        m = (l + r) >>> 1;
        System.out.println(m);
    }

    private static void m2() {
        int l = 0;
        int r = Integer.MAX_VALUE - 1;

        // (l+r)/2  --->  l/2 + r/2  --->  l - l/2 + r/2  ---> l + (r-l)/2
        int m = l + (r - l) / 2;
        System.out.println(m);
        // 二分查找，在右侧
        l = m + 1;
        m = l + (r - l) / 2;
        System.out.println(m);
    }

    private static void m1() {
        int l = 0;
        int r = Integer.MAX_VALUE - 1;

        int m = (l + r) / 2;
        // 1073741823
        System.out.println(m);

        // 二分查找，在右侧
        l = m + 1;
        m = (l + r) / 2;
        // -536870913，此时数据溢出，变成了负数
        System.out.println(m);
    }

}
